home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / rallyx.c < prev    next >
C/C++ Source or Header  |  2000-05-04  |  14KB  |  431 lines

  1. /***************************************************************************
  2.  
  3. Rally X memory map (preliminary)
  4.  
  5. driver by Nicola Salmoria
  6.  
  7.  
  8. 0000-3fff ROM
  9. 8000-83ff Radar video RAM + other
  10. 8400-87ff video RAM
  11. 8800-8bff Radar color RAM + other
  12. 8c00-8fff color RAM
  13. 9800-9fff RAM
  14.  
  15. memory mapped ports:
  16.  
  17. read:
  18. a000      IN0
  19. a080      IN1
  20. a100      DSW1
  21.  
  22. write:
  23. 8014-801f sprites - 6 pairs: code (including flipping) and X position
  24. 8814-881f sprites - 6 pairs: Y position and color
  25. 8034-880c radar car indicators x position
  26. 8834-883c radar car indicators y position
  27. a004-a00c radar car indicators color and x position MSB
  28. a080      watchdog reset
  29. a105      sound voice 1 waveform (nibble)
  30. a111-a113 sound voice 1 frequency (nibble)
  31. a115      sound voice 1 volume (nibble)
  32. a10a      sound voice 2 waveform (nibble)
  33. a116-a118 sound voice 2 frequency (nibble)
  34. a11a      sound voice 2 volume (nibble)
  35. a10f      sound voice 3 waveform (nibble)
  36. a11b-a11d sound voice 3 frequency (nibble)
  37. a11f      sound voice 3 volume (nibble)
  38. a130      virtual screen X scroll position
  39. a140      virtual screen Y scroll position
  40. a170      ? this is written to A LOT of times every frame
  41. a180      explosion sound trigger
  42. a181      interrupt enable
  43. a182      ?
  44. a183      flip screen
  45. a184      1 player start lamp
  46. a185      2 players start lamp
  47. a186      coin lockout
  48. a187      coin counter
  49.  
  50. I/O ports:
  51. OUT on port $0 sets the interrupt vector/instruction (the game uses both
  52. IM 2 and IM 0)
  53.  
  54. ***************************************************************************/
  55.  
  56. #include "driver.h"
  57. #include "vidhrdw/generic.h"
  58.  
  59.  
  60.  
  61. WRITE_HANDLER( pengo_sound_w );
  62. extern unsigned char *pengo_soundregs;
  63.  
  64. extern unsigned char *rallyx_videoram2,*rallyx_colorram2;
  65. extern unsigned char *rallyx_radarx,*rallyx_radary,*rallyx_radarattr;
  66. extern size_t rallyx_radarram_size;
  67. extern unsigned char *rallyx_scrollx,*rallyx_scrolly;
  68. WRITE_HANDLER( rallyx_videoram2_w );
  69. WRITE_HANDLER( rallyx_colorram2_w );
  70. WRITE_HANDLER( rallyx_spriteram_w );
  71. WRITE_HANDLER( rallyx_flipscreen_w );
  72. void rallyx_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
  73. int rallyx_vh_start(void);
  74. void rallyx_vh_stop(void);
  75. void rallyx_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  76.  
  77.  
  78. static WRITE_HANDLER( rallyx_coin_lockout_w )
  79. {
  80.     coin_lockout_w(offset, data ^ 1);
  81. }
  82.  
  83. static WRITE_HANDLER( rallyx_leds_w )
  84. {
  85.     osd_led_w(offset,data);
  86. }
  87.  
  88. static WRITE_HANDLER( rallyx_play_sound_w )
  89. {
  90.     static int last;
  91.  
  92.  
  93.     if (data == 0 && last != 0)
  94.         sample_start(0,0,0);
  95.  
  96.     last = data;
  97. }
  98.  
  99. static struct MemoryReadAddress readmem[] =
  100. {
  101.     { 0x0000, 0x3fff, MRA_ROM },
  102.     { 0x8000, 0x8fff, MRA_RAM },
  103.     { 0x9800, 0x9fff, MRA_RAM },
  104.     { 0xa000, 0xa000, input_port_0_r },    /* IN0 */
  105.     { 0xa080, 0xa080, input_port_1_r },    /* IN1 */
  106.     { 0xa100, 0xa100, input_port_2_r },    /* DSW1 */
  107.     { -1 }    /* end of table */
  108. };
  109.  
  110. static struct MemoryWriteAddress writemem[] =
  111. {
  112.     { 0x0000, 0x3fff, MWA_ROM },
  113.     { 0x8000, 0x83ff, videoram_w, &videoram, &videoram_size },
  114.     { 0x8400, 0x87ff, rallyx_videoram2_w, &rallyx_videoram2 },
  115.     { 0x8800, 0x8bff, colorram_w, &colorram },
  116.     { 0x8c00, 0x8fff, rallyx_colorram2_w, &rallyx_colorram2 },
  117.     { 0x9800, 0x9fff, MWA_RAM },
  118.     { 0xa004, 0xa00f, MWA_RAM, &rallyx_radarattr },
  119.     { 0xa080, 0xa080, watchdog_reset_w },
  120.     { 0xa100, 0xa11f, pengo_sound_w, &pengo_soundregs },
  121.     { 0xa130, 0xa130, MWA_RAM, &rallyx_scrollx },
  122.     { 0xa140, 0xa140, MWA_RAM, &rallyx_scrolly },
  123.     //{ 0xa170, 0xa170, MWA_NOP },    /* ????? */
  124.     { 0xa180, 0xa180, rallyx_play_sound_w },
  125.     { 0xa181, 0xa181, interrupt_enable_w },
  126.     { 0xa183, 0xa183, rallyx_flipscreen_w },
  127.     { 0xa184, 0xa185, rallyx_leds_w },
  128.     { 0xa186, 0xa186, rallyx_coin_lockout_w },
  129.     { 0xa187, 0xa187, coin_counter_w },
  130.     { 0x8014, 0x801f, MWA_RAM, &spriteram, &spriteram_size },    /* these are here just to initialize */
  131.     { 0x8814, 0x881f, MWA_RAM, &spriteram_2 },    /* the pointers. */
  132.     { 0x8034, 0x803f, MWA_RAM, &rallyx_radarx, &rallyx_radarram_size },    /* ditto */
  133.     { 0x8834, 0x883f, MWA_RAM, &rallyx_radary },
  134.     { -1 }    /* end of table */
  135. };
  136.  
  137. static struct IOWritePort writeport[] =
  138. {
  139.     { 0, 0, interrupt_vector_w },
  140.     { -1 }    /* end of table */
  141. };
  142.  
  143.  
  144.  
  145. INPUT_PORTS_START( rallyx )
  146.     PORT_START      /* IN0 */
  147.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 )
  148.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
  149.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY )
  150.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT |IPF_4WAY )
  151.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY )
  152.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY )
  153.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
  154.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
  155.  
  156.     PORT_START      /* IN1 */
  157.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
  158.     PORT_DIPSETTING(    0x01, DEF_STR( Upright ) )
  159.     PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
  160.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  161.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_COCKTAIL )
  162.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
  163.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_COCKTAIL )
  164.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY | IPF_COCKTAIL )
  165.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
  166.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
  167.  
  168.     PORT_START      /* DSW0 */
  169.     PORT_SERVICE( 0x01, IP_ACTIVE_LOW )
  170.     /* TODO: the bonus score depends on the number of lives */
  171.     PORT_DIPNAME( 0x06, 0x02, DEF_STR( Bonus_Life ) )
  172.     PORT_DIPSETTING(    0x02, "A" )
  173.     PORT_DIPSETTING(    0x04, "B" )
  174.     PORT_DIPSETTING(    0x06, "C" )
  175.     PORT_DIPSETTING(    0x00, "None" )
  176.     PORT_DIPNAME( 0x38, 0x08, DEF_STR( Difficulty ) )
  177.     PORT_DIPSETTING(    0x10, "1 Car, Medium" )
  178.     PORT_DIPSETTING(    0x28, "1 Car, Hard" )
  179.     PORT_DIPSETTING(    0x00, "2 Cars, Easy" )
  180.     PORT_DIPSETTING(    0x18, "2 Cars, Medium" )
  181.     PORT_DIPSETTING(    0x30, "2 Cars, Hard" )
  182.     PORT_DIPSETTING(    0x08, "3 Cars, Easy" )
  183.     PORT_DIPSETTING(    0x20, "3 Cars, Medium" )
  184.     PORT_DIPSETTING(    0x38, "3 Cars, Hard" )
  185.     PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coinage ) )
  186.     PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) )
  187.     PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) )
  188.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
  189.     PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
  190. INPUT_PORTS_END
  191.  
  192. INPUT_PORTS_START( nrallyx )
  193.     PORT_START      /* IN0 */
  194.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN3 )
  195.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
  196.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY )
  197.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT |IPF_4WAY )
  198.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY )
  199.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY )
  200.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
  201.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
  202.  
  203.     PORT_START      /* IN1 */
  204.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) )
  205.     PORT_DIPSETTING(    0x01, DEF_STR( Upright ) )
  206.     PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
  207.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
  208.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_4WAY | IPF_COCKTAIL )
  209.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_COCKTAIL )
  210.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_4WAY | IPF_COCKTAIL )
  211.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_4WAY | IPF_COCKTAIL )
  212.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
  213.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN2 )
  214.  
  215.     PORT_START      /* DSW0 */
  216.     PORT_SERVICE( 0x01, IP_ACTIVE_LOW )
  217.     /* TODO: the bonus score depends on the number of lives */
  218.     PORT_DIPNAME( 0x06, 0x02, DEF_STR( Bonus_Life ) )
  219.     PORT_DIPSETTING(    0x02, "A" )
  220.     PORT_DIPSETTING(    0x04, "B" )
  221.     PORT_DIPSETTING(    0x06, "C" )
  222.     PORT_DIPSETTING(    0x00, "None" )
  223.     PORT_DIPNAME( 0x38, 0x00, DEF_STR( Difficulty ) )
  224.     PORT_DIPSETTING(    0x10, "1 Car, Medium" )
  225.     PORT_DIPSETTING(    0x28, "1 Car, Hard" )
  226.     PORT_DIPSETTING(    0x18, "2 Cars, Medium" )
  227.     PORT_DIPSETTING(    0x30, "2 Cars, Hard" )
  228.     PORT_DIPSETTING(    0x00, "3 Cars, Easy" )
  229.     PORT_DIPSETTING(    0x20, "3 Cars, Medium" )
  230.     PORT_DIPSETTING(    0x38, "3 Cars, Hard" )
  231.     PORT_DIPSETTING(    0x08, "4 Cars, Easy" )
  232.     PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coinage ) )
  233.     PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) )
  234.     PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) )
  235.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
  236.     PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
  237. INPUT_PORTS_END
  238.  
  239.  
  240.  
  241. static struct GfxLayout charlayout =
  242. {
  243.     8,8,    /* 8*8 characters */
  244.     256,    /* 256 characters */
  245.     2,    /* 2 bits per pixel */
  246.     { 0, 4 },    /* the two bitplanes for 4 pixels are packed into one byte */
  247.     { 8*8+0, 8*8+1, 8*8+2, 8*8+3, 0, 1, 2, 3 },    /* bits are packed in groups of four */
  248.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  249.     16*8    /* every char takes 16 bytes */
  250. };
  251. static struct GfxLayout spritelayout =
  252. {
  253.     16,16,    /* 16*16 sprites */
  254.     64,    /* 64 sprites */
  255.     2,    /* 2 bits per pixel */
  256.     { 0, 4 },    /* the two bitplanes for 4 pixels are packed into one byte */
  257.     { 8*8+0, 8*8+1, 8*8+2, 8*8+3, 16*8+0, 16*8+1, 16*8+2, 16*8+3,    /* bits are packed in groups of four */
  258.              24*8+0, 24*8+1, 24*8+2, 24*8+3, 0, 1, 2, 3 },
  259.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  260.             32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 },
  261.     64*8    /* every sprite takes 64 bytes */
  262. };
  263.  
  264. static struct GfxLayout dotlayout =
  265. {
  266.     4,4,    /* 4*4 characters */
  267.     8,    /* 8 characters */
  268.     2,    /* 2 bits per pixel */
  269.     { 6, 7 },
  270.     { 3*8, 2*8, 1*8, 0*8 },
  271.     { 3*32, 2*32, 1*32, 0*32 },
  272.     16*8    /* every char takes 16 consecutive bytes */
  273. };
  274.  
  275.  
  276.  
  277. static struct GfxDecodeInfo gfxdecodeinfo[] =
  278. {
  279.     { REGION_GFX1, 0, &charlayout,        0, 64 },
  280.     { REGION_GFX1, 0, &spritelayout,      0, 64 },
  281.     { REGION_GFX2, 0, &dotlayout,      64*4,  1 },
  282.     { -1 } /* end of array */
  283. };
  284.  
  285.  
  286.  
  287. static struct namco_interface namco_interface =
  288. {
  289.     3072000/32,    /* sample rate */
  290.     3,            /* number of voices */
  291.     100,        /* playback volume */
  292.     REGION_SOUND1    /* memory region */
  293. };
  294.  
  295. static const char *rallyx_sample_names[] =
  296. {
  297.     "*rallyx",
  298.     "bang.wav",
  299.     0    /* end of array */
  300. };
  301.  
  302. static struct Samplesinterface samples_interface =
  303. {
  304.     1,    /* 1 channel */
  305.     80,    /* volume */
  306.     rallyx_sample_names
  307. };
  308.  
  309.  
  310.  
  311. static struct MachineDriver machine_driver_rallyx =
  312. {
  313.     /* basic machine hardware */
  314.     {
  315.         {
  316.             CPU_Z80,
  317.             3072000,    /* 3.072 Mhz ? */
  318.             readmem,writemem,0,writeport,
  319.             interrupt,1
  320.         }
  321.     },
  322.     60, DEFAULT_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  323.     1,    /* single CPU, no need for interleaving */
  324.     0,
  325.  
  326.     /* video hardware */
  327.     36*8, 28*8, { 0*8, 36*8-1, 0*8, 28*8-1 },
  328.     gfxdecodeinfo,
  329.     32,64*4+4,
  330.     rallyx_vh_convert_color_prom,
  331.  
  332.     VIDEO_TYPE_RASTER,
  333.     0,
  334.     rallyx_vh_start,
  335.     rallyx_vh_stop,
  336.     rallyx_vh_screenrefresh,
  337.  
  338.     /* sound hardware */
  339.     0,0,0,0,
  340.     {
  341.         {
  342.             SOUND_NAMCO,
  343.             &namco_interface
  344.         },
  345.         {
  346.             SOUND_SAMPLES,
  347.             &samples_interface
  348.         }
  349.     }
  350. };
  351.  
  352.  
  353.  
  354. /***************************************************************************
  355.  
  356.   Game driver(s)
  357.  
  358. ***************************************************************************/
  359.  
  360. ROM_START( rallyx )
  361.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  362.     ROM_LOAD( "1b",           0x0000, 0x1000, 0x5882700d )
  363.     ROM_LOAD( "rallyxn.1e",   0x1000, 0x1000, 0xed1eba2b )
  364.     ROM_LOAD( "rallyxn.1h",   0x2000, 0x1000, 0x4f98dd1c )
  365.     ROM_LOAD( "rallyxn.1k",   0x3000, 0x1000, 0x9aacccf0 )
  366.  
  367.     ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  368.     ROM_LOAD( "8e",           0x0000, 0x1000, 0x277c1de5 )
  369.  
  370.     ROM_REGION( 0x0100, REGION_GFX2 | REGIONFLAG_DISPOSE )
  371.     ROM_LOAD( "im5623.8m",    0x0000, 0x0100, 0x3c16f62c )    /* dots */
  372.  
  373.     ROM_REGION( 0x0120, REGION_PROMS )
  374.     ROM_LOAD( "m3-7603.11n",  0x0000, 0x0020, 0xc7865434 )
  375.     ROM_LOAD( "im5623.8p",    0x0020, 0x0100, 0x834d4fda )
  376.  
  377.     ROM_REGION( 0x0200, REGION_SOUND1 )    /* sound proms */
  378.     ROM_LOAD( "im5623.3p",    0x0000, 0x0100, 0x4bad7017 )
  379.     ROM_LOAD( "im5623.2m",    0x0100, 0x0100, 0x77245b66 )    /* timing - not used */
  380. ROM_END
  381.  
  382. ROM_START( rallyxm )
  383.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  384.     ROM_LOAD( "1b",           0x0000, 0x1000, 0x5882700d )
  385.     ROM_LOAD( "1e",           0x1000, 0x1000, 0x786585ec )
  386.     ROM_LOAD( "1h",           0x2000, 0x1000, 0x110d7dcd )
  387.     ROM_LOAD( "1k",           0x3000, 0x1000, 0x473ab447 )
  388.  
  389.     ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  390.     ROM_LOAD( "8e",           0x0000, 0x1000, 0x277c1de5 )
  391.  
  392.     ROM_REGION( 0x0100, REGION_GFX2 | REGIONFLAG_DISPOSE )
  393.     ROM_LOAD( "im5623.8m",    0x0000, 0x0100, 0x3c16f62c )    /* dots */
  394.  
  395.     ROM_REGION( 0x0120, REGION_PROMS )
  396.     ROM_LOAD( "m3-7603.11n",  0x0000, 0x0020, 0xc7865434 )
  397.     ROM_LOAD( "im5623.8p",    0x0020, 0x0100, 0x834d4fda )
  398.  
  399.     ROM_REGION( 0x0200, REGION_SOUND1 )    /* sound proms */
  400.     ROM_LOAD( "im5623.3p",    0x0000, 0x0100, 0x4bad7017 )
  401.     ROM_LOAD( "im5623.2m",    0x0100, 0x0100, 0x77245b66 )    /* timing - not used */
  402. ROM_END
  403.  
  404. ROM_START( nrallyx )
  405.     ROM_REGION( 0x10000, REGION_CPU1 )    /* 64k for code */
  406.     ROM_LOAD( "nrallyx.1b",   0x0000, 0x1000, 0x9404c8d6 )
  407.     ROM_LOAD( "nrallyx.1e",   0x1000, 0x1000, 0xac01bf3f )
  408.     ROM_LOAD( "nrallyx.1h",   0x2000, 0x1000, 0xaeba29b5 )
  409.     ROM_LOAD( "nrallyx.1k",   0x3000, 0x1000, 0x78f17da7 )
  410.  
  411.     ROM_REGION( 0x1000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  412.     ROM_LOAD( "nrallyx.8e",   0x0000, 0x1000, 0xca7a174a )
  413.  
  414.     ROM_REGION( 0x0100, REGION_GFX2 | REGIONFLAG_DISPOSE )
  415.     ROM_LOAD( "im5623.8m",    0x0000, 0x0100, BADCRC( 0x3c16f62c ) )    /* dots */
  416.  
  417.     ROM_REGION( 0x0120, REGION_PROMS )
  418.     ROM_LOAD( "nrallyx.pr1",  0x0000, 0x0020, 0xa0a49017 )
  419.     ROM_LOAD( "nrallyx.pr2",  0x0020, 0x0100, 0xb2b7ca15 )
  420.  
  421.     ROM_REGION( 0x0200, REGION_SOUND1 )    /* sound proms */
  422.     ROM_LOAD( "nrallyx.spr",  0x0000, 0x0100, 0xb75c4e87 )
  423.     ROM_LOAD( "im5623.2m",    0x0100, 0x0100, 0x77245b66 )    /* timing - not used */
  424. ROM_END
  425.  
  426.  
  427.  
  428. GAME( 1980, rallyx,  0,      rallyx, rallyx,  0, ROT0, "Namco", "Rally X" )
  429. GAME( 1980, rallyxm, rallyx, rallyx, rallyx,  0, ROT0, "[Namco] (Midway license)", "Rally X (Midway)" )
  430. GAME( 1981, nrallyx, 0,      rallyx, nrallyx, 0, ROT0, "Namco", "New Rally X" )
  431.